//
//  LYJDateService.m
//  Pods
//
//  Created by 李亚军 on 17/3/28.
//
//

#import "LYJDateService.h"

@implementation LYJDateService


/**
 作用: 时间字符串转化为时间戳

 @param dateString 时间字符串
 @param formatter 时间字符串的格式,这个格式必须与时间字符串保持一致,不然会报错,例如时间字符串 2017/10/31 16:30:30,那么时间字符串格式输入参数:yyyy/MM/dd HH:mm:ss
 @return 返回的时间戳,包含时间戳
 */
+ (NSTimeInterval)timeStringToTimestampWithTimeString:(NSString *)timeString timeFormatter:(NSString *)timeFormatter {
    
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:timeFormatter];
    NSDate *date = [dateFormatter dateFromString:timeString];
    NSTimeInterval dateTimeStamp = [date timeIntervalSince1970];
    
    return dateTimeStamp;
}


/**
 作用: 时间戳转化为指定格式的时间字符串

 @param timestamp 时间戳
 @param timeFormatter 指定的时间格式
 @return 返回指定格式的时间字符串
 */
+ (NSString *)timestampToDateStringWithTimeStamp:(NSTimeInterval)timestamp timeFormatter:(NSString *)timeFormatter {
    
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:timeFormatter];
    NSDate *date = [NSDate dateWithTimeIntervalSince1970:timestamp];
    NSString *timeString = [dateFormatter stringFromDate:date];
    
    return timeString;
}


/**
 作用: 获取某一天的时间戳
 
 @param dayNumber 距离今天的天数,可以为负数,例如: 0: 代表今天, 1: 代表明天 , 2: 代表后天 ... , -1: 代表昨天 , -2: 代表前天 ...
 @return 返回时间戳(不包含毫秒)
 */
+ (NSTimeInterval)getOneDayTimestampFromTodayWithDayNumber:(NSInteger)dayNumber {
    
    NSDate *date = [NSDate dateWithTimeIntervalSinceNow:dayNumber * 24 * 60 * 60];
    NSTimeInterval timeInterval = [date timeIntervalSince1970];
    
    return timeInterval;
}


/**
 作用: 获取距离今天某一天的当前小时延迟n个小时后的时间戳,例如当前时间2017/10/27 08:55:45 , 获取今天延迟一个小时候的时间戳 dayNumber:0 , delayHourTime: 1

 @param dayNumber 距离今天的某一天,可以为负数(-1: 代表昨天 , 0: 代表今天 , 1: 代表明天)
 @param delayHourTime 延迟的小时:( -1: 假如当前3点50分,-1代表2点50分 , 0: 假如当前3点50分,0代表3点50分 , 1: 假如当前3点50分,-1代表2点50分)
 @return 返回时间戳(到秒)
 */
+ (NSTimeInterval)getOneDayTimestampFromTodayWithDayNumber:(NSInteger)dayNumber delayHourTime:(NSInteger)delayHourTime {
    
    NSDate *date = [NSDate dateWithTimeIntervalSinceNow:dayNumber * 24 * 60 * 60 + delayHourTime * 60 * 60];
    NSTimeInterval timeInterval = [date timeIntervalSince1970];
    
    return timeInterval;
}


/**
 作用: 获取距离今天 N 天的星期
 
 @param dayNumber 距离今天 N 天的日期 , 0代表今天, -1昨天, 1:明天
 @param weekArray 星期数组,如果为nil默认星期数组 @[@"周日" , @"周一" , @"周二" , @"周三" , @"周四" , @"周五" , @"周六" , @"周日"]
 @return 返回星期的字符串,返回类型为星期数组中的内容
 */
+ (NSString *)getOneDayWeekFromTodayWithDayNumber:(NSInteger)dayNumber weekArray:(NSArray *)weekArray {
    
    if (weekArray == nil) {
        weekArray = @[@"周日" , @"周一" , @"周二" , @"周三" , @"周四" , @"周五" , @"周六" , @"周日"];
    }
    
    NSDate *date = [NSDate dateWithTimeIntervalSinceNow:dayNumber * 24 * 60 * 60];
    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
    NSTimeZone *timeZone = [[NSTimeZone alloc] initWithName:@"Asia/Shanghai"];
    [calendar setTimeZone: timeZone];
    NSCalendarUnit calendarUnit = NSCalendarUnitWeekday;
    NSDateComponents *theComponents = [calendar components:calendarUnit fromDate:date];
    NSString *week = [NSString stringWithFormat:@"%@" , [weekArray objectAtIndex:theComponents.weekday - 1]];
    
    return week;
}


/**
 作用: 根据时间戳获取某天的星期

 @param timestamp 某天的时间戳
 @param dayNumber 距离该天的天数差
 @param weekArray 星期数组(如果为nil ,默认数组 @[@"周日" , @"周一" , @"周二" , @"周三" , @"周四" , @"周五" , @"周六" , @"周日"])
 @return 返回某天的星期
 */
+ (NSString *)getOneDayWeekFromOnedayTimestamp:(NSTimeInterval)timestamp dayNumber:(NSInteger)dayNumber weekArray:(NSArray *)weekArray {
    
    if (weekArray == nil) {
        weekArray = @[@"周日" , @"周一" , @"周二" , @"周三" , @"周四" , @"周五" , @"周六" , @"周日"];
    }
    
    NSDate *date = [NSDate dateWithTimeIntervalSince1970:timestamp + dayNumber * 24 * 60 * 60];
    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
    NSTimeZone *timeZone = [[NSTimeZone alloc] initWithName:@"Asia/Shanghai"];
    [calendar setTimeZone: timeZone];
    NSCalendarUnit calendarUnit = NSCalendarUnitWeekday;
    NSDateComponents *theComponents = [calendar components:calendarUnit fromDate:date];
    NSString *week = [NSString stringWithFormat:@"%@" , [weekArray objectAtIndex:theComponents.weekday - 1]];
    
    return week;
}

@end
